# Написать программу, которая построчно вводит натуральное число N, затем — N целых чисел, а затем выводит их в строку через пробел в отсортированном виде (допустим пробел в конце).
# В программе должна быть предусмотрена подпрограмма sort, которой передаются два параметра — адрес массива в a0 и размер массива в a1.
# Сама подпрограмма sort должна реализовывать алгоритм сортировки выбором (см. в подсказках), для чего должна вызывать подпрограмму minaddr из предыдущего домашнего задания

# В программе предусмотреть подпрограмму minaddr,
#  которой в a0 передаётся адрес массива, в a1 — A, в a2 — B,
#  а возвращает она в a0 — наименьшее значение массива в диапазоне, а в a1 — адрес элемента, где был найден минимум (если таких несколько, то с наименьшим индексом)

.data
array:

.text
Begin:
	li	a7, 5
	ecall
	mv	s0, a0
	la	s3, array
	bgez	s0, .notneg
	neg	s0, s0
.notneg:
	mv	s1, s0
.loop1:	blez	s1, .endloop1
	addi	s1, s1, -1
	ecall
	sw	a0, (s3)
	addi	s3, s3, 4
	b	.loop1
.endloop1:
	
	la	a0, array
	mv	a1, s0
	jal	Sort
	
	la	s3, array

.loop2:	blez	s0, .endloop2
	addi	s0, s0, -1
	lw	a0, (s3)
	li	a7, 1
	ecall
	li	a0, ' '
	li	a7, 11
	ecall
	addi	s3, s3, 4
	b	.loop2
.endloop2:	
	li	a7, 10
	ecall
		

Sort:
	addi    sp, sp, -4
        sw      ra, (sp)
        addi    sp, sp, -4
        sw      s0, (sp)
        addi    sp, sp, -4
        sw      s1, (sp)
        addi    sp, sp, -4
        sw      s2, (sp)
        addi    sp, sp, -4
        sw      s3, (sp)
        
       	mv	s0, a0
       	mv	s3, s0
        li	s1, 0        
        addi	s2, a1, -1
.sloop:	bgt	s1, s2, .sendloop
	mv	a0, s3
	mv	a1, s1
	mv	a2, s2
	jal	Minaddr
	beq	a1, s0, .sequal
	lw	t0, (s0)
	sw	a0, (s0)
	sw	t0, (a1)
.sequal:	
	addi	s0, s0, 4
	addi	s1, s1, 1
	b	.sloop
.sendloop:
        
        lw      s3, (sp)
        addi    sp, sp, 4                
        lw      s2, (sp)
        addi    sp, sp, 4                
        lw      s1, (sp)
        addi    sp, sp, 4
        lw      s0, (sp)
        addi    sp, sp, 4        
        lw      ra, (sp)
        addi    sp, sp, 4
	ret	
        

Minaddr:
	addi    sp, sp, -4
        sw      ra, (sp)
	
	slli	a1, a1, 2
	add	t1, a0, a1
	slli	a2, a2, 2
	add	t2, a0, a2
	lw	a0, (t1)
	mv	a1, t1
.mloop:	bge	t1, t2, .mendloop
	addi	t1, t1, 4
	lw	t0, (t1)
	bge	t0, a0, .mloop
	mv	a0, t0
	mv	a1, t1
	b	.mloop
	
.mendloop:	
	lw      ra, (sp)
        addi    sp, sp, 4
	ret	
